function title(tit) {
    tit += "";
    // 字符串转化成数组 每个字符占一个元素
    var tits = tit.split("")
    var titLenght = 0;
    for (let i = 0; i < tits.length; i++) {
        const elem = tits[i];
        if (elem.charCodeAt(elem) > 255) {
            titLenght += 2;
        } else {
            titLenght += 1;
        }
    }
    var spaceNum = 24 - titLenght;
    var leftSpaceNum = parseInt(spaceNum / 2)
    var rightSpaceNum = spaceNum - leftSpaceNum;

    var leftSpaceStr = "";
    var rightSpaceStr = "";
    for (let i = 0; i < leftSpaceNum; i++) {
        leftSpaceStr += " "
    }
    for (let i = 0; i < rightSpaceNum; i++) {
        rightSpaceStr += " "
    }
    var logString = "|" + leftSpaceStr + tit + rightSpaceStr + "|"

    console.log("+------------------------+");
    console.log(logString);
    console.log("+------------------------+");
}


title("函数")

/** 函数
 * 函数使用关键字 function声明
 * 函数{}内部的代码不会直接运行 需要调用函数时才执行
 * 函数一般是重复功能代码的封装 例如封装一个时间函数
 * 函数可以通过return返回调用函数处 一个结果值
 * 函数可以接受形参 内部处理形参后返回值 例如: 想例如time()函数获取当前时间的同时 也能够获取当前时间戳
 */

function func1() {
    console.log("只有调用func1()时才执行这里的代码");
}

// func1()
function time(unix = false) {
    let date = new Date()
    if (unix) {
        let N = date.getFullYear();
        let Y = date.getMonth() + 1;
        let R = date.getDate();

        let S = date.getHours();
        let F = date.getMinutes();
        let M = date.getSeconds();
        return `${N}-${Y}-${R} ${S}:${F}:${M}`
    } else {
        return date.getTime()
    }
}

// console.log(time(true));
// setTimeout(()=>{
//     console.log(time(true));
// },1000) 




/** 函数形参默认是一一对应接受参数的 函数有一个内置对象agruments可以无限接受参数 */

function agr() {
    console.log(arguments);
}

// agr(1,5,9,8,4,3,4,64657467,84,14)
/** 补充知识，es6中...语法可以类似arguments的效果 */

function agr1(...a) {
    console.log(a)
}
agr1(1, 5, 9, 8, 4, 3, 4, 64657467, 84, 14)